扩频通信系统仿真实验(基于Matlab)

一、题目

扩频通信系统仿真实验

二、仿真要求

要求一:扩频通信系统的多用户数据传输

①传输的数据随机产生,要求采用频带传输(BPSK调制);

②扩频码要求采用周期为63(或127)的m序列;

③仿真从基站发送数据到三个不同的用户,各不同用户分别进行数据接收;

④设计三种不同的功率延迟分布,从基站到达三个不同的用户分别经过多径衰落(路径数分别为2,3,4);

⑤三个用户接收端分别解出各自的数据并与发送前的数据进行差错比较。

三、仿真方案详细设计

我选择扩频通信系统的多用户数据传输

通信系统的总体框图如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tJ6eqszq-1588732523745)(media/a360d582a4d7ca95767ae4d6dc999d44.png)]

发射机原理框图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G28eMW1y-1588732523748)(media/7c0c1c64e50f7bc2e65540eb958fab15.png)]

接收机原理框图:

在这里插入图片描述

由上图可知,整个设计由发送端、信道和接收机组成。

其中发射端主要完成m序列的产生,随机0, 1序列的产生。然后利用m序列对产生的随

机序列进行扩频,然后再用cos (wt)对其进行调制。

信道主要模拟信号的多径传输,在这个信道中一共有三个用户的数据进行传输,用户一经过了2径衰落,用户二经过了3径衰落,用户三经过了4径衰落。

接收端接收到的信号是几路多径信号的加噪后的叠加,首先要完成信号的解扩,然后再解调,滤波,抽样判决最后分别与原始信号比较并统计误码率

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTFQRkmE-1588732523751)(media/b93a2604ddfd95c167186585cd3bad33.png)]

现对主要功能部分进行详细描述:

1.扩频码(m序列)的产生

扩频码为伪随机序列,本实验采用自相关特性好,互相关特性较差的M序列,因为有三路用户,故选取带有6位移位寄存器,周期为63的m序列。根据上图可以得出其对应的二进制序列分别为:
1000011, 1100111, 1101101.以1000011为例,其具体的寄存器结构图如下所示:

初始化各寄存器单元内容为1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tX6eGjal-1588732523752)(media/ca39951f396890c0e36a50ebbfcaf5c6.png)]

2.产生信息(1,-1)的数据流

代码如下:

function signal=information(N)

signal=rand(1,N)\>=0.5;

signal=signal\*2-1;

End

% 其中参数N是指本次产生的数据个数。

3.产生扩频码(只产生一个周期的m序列)

代码如下:

function c=genMseq(b)

N=length(b)-1;

D=ones(1,N);

A=b(N:-1:1);

c=[];

for i=1:2\^N-1

c1=rem(sum(D.\*A),2);

c=[c,D(N)];

D=[c1,D(1:N-1)];

end

c=c\*2-1; %变为1,-1的序列

end

4.扩频

扩频的主要思想是每一位数据位都扩展成长度为m序列长的信息,其具体做法是将数据信息中的‘1’
用m序列代替,而对于‘-1’
用-m序列代替,这样对每-一个数据位都进行扩展就实现了对原始数据的扩频。

代码如下:

%扩频

function ssignal=dsss(signal,c)

ssignal=[];

for i=1:length(signal)

ssignal=[ssignal,signal(i)\*c];

end

end

5.调制,使用BPSK方式

代码如下:

%调制

function modusignal=modu(signal, dataRate,fc, fs)

%采用BPSK调制方式

t=linspace(0,1/dataRate,fs/dataRate);

carrier=cos(2\* pi\*fc\*t);

modusignal=[];

for i=1:length(signal)

modusignal=[modusignal,carrier\*signal(i)];

end

end

6.解扩

代码如下:

%解扩实现

function dessignal=dedsss(receiveSignal,c,chipRate,fs)

L=fs/chipRate;

c1=[];

for i=1:length(c)

c1=[c1,c(i)\*ones(1,L)];

end

dessignal=[];

for i=1:length(c1):length(receiveSignal)

dessignal= [dessignal,receiveSignal(i:i+length(c1)-1).\*c1];

end

end

7.解调

代码如下:

%解调实现.

function demoSignal=demodu(Resignal,datarate,fc,fs)

t = linspace(0,1/datarate,fs/datarate);

carrier=cos(2\*pi\*fc\*t);Lc=length(carrier);

Ls=length(Resignal);designal=[];

for i=1:Lc:Ls

designal=[designal,carrier.\*Resignal(i:i+Lc-1)];

end

demoSignal = [];

for i= 1:Lc:Ls

threshold= sum(designal(i:i+Lc-1));

if threshold\>0

tt=1;

else

tt= -1;

end

demoSignal=[demoSignal,tt];

end

end

四、主函数仿真代码

%扩频通信系统仿真的主程序.

clear all;

close all;

clc;

dataRate= 1000;

chipRate=63\*dataRate;

fc=chipRate\*2;

fs=fc\*8;

N=1000;

c=63;

b1=[1,0,0,0,0,1,1];

b2=[1,1,0,0,1,1,1];

b3=[1,1,0,1,1,0,1];

snr=-20:2:-10;

for i= 1:length(snr);

signal1=information(N);

signal2 =information(N);

signal3=information(N);

c1=genMseq(b1);c2=genMseq(b2);c3=genMseq(b3);

dssignal1=dsss(signal1,c1);

dssignal2=dsss(signal2,c2);

dssignal3=dsss(signal3,c3);

modusignal1= modu(dssignal1,chipRate,fc, fs);

modusignal2= modu(dssignal2,chipRate,fc, fs);

modusignal3= modu(dssignal3,chipRate,fc, fs);

mixsignal=modusignal1 + modusignal2 +modusignal3;

receiveSignal=awgn(mixsignal,snr(i));

dedssignal1=dedsss(receiveSignal,c1 ,chipRate,fs);

demoSignal1=demodu(dedssignal1,dataRate,fc,fs);

dedssignal2=dedsss(receiveSignal,c2,chipRate,fs);

demoSignal2=demodu(dedssignal2,dataRate,fc,fs);

dedssignal3=dedsss(receiveSignal,c3,chipRate,fs);

demoSignal3=demodu(dedssignal3,dataRate,fc,fs);

err_bitl(i)=sum(demoSignal1\~=signal1)/N;

err_bit2(i)=sum(demoSignal2\~=signal2)/N;

err_bit3(i)=sum(demoSignal3\~=signal3)/N;

end

semilogy(snr,err_bitl,'-s',snr,err_bit2,'-h',snr,err_bit3,'-\*');

legend('用户1',' 用户2','用户3');

xlabel('信噪比');

ylabel('误比特率');
emoSignal3=demodu(dedssignal3,dataRate,fc,fs);

err_bitl(i)=sum(demoSignal1\~=signal1)/N;

err_bit2(i)=sum(demoSignal2\~=signal2)/N;

err_bit3(i)=sum(demoSignal3\~=signal3)/N;

end

semilogy(snr,err_bitl,'-s',snr,err_bit2,'-h',snr,err_bit3,'-\*');

legend('用户1',' 用户2','用户3');

xlabel('信噪比');

ylabel('误比特率');

五、仿真结果

各项的数值如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9xIGNQJ-1588732523753)(media/d972b178efcb23c78a8529cbdcc8cef5.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-942xb3eq-1588732523754)(media/2da480d7ff2d16b180de512ebe6fa5b8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Tq4ZoNt-1588732523755)(media/6df6883cda3ba8d29f1bed2f4f4b9677.png)]

结论:

①当误比特率一定时,看曲线图总体来说,用户1的信噪比\>用户2的信噪比\>用户3的信噪比。

②当误信噪比一定时,看曲线图总体来说,用户3的误比特率\>用户2的误比特率\>用户1的误比特率。

③解调是,一定是先解扩在解调。
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值